60a06040525f600b5534801562000014575f80fd5b506040516200266d3803806200266d833981016040819052620000379162000223565b604080518082018252600781526620bd3ab934b0b760c91b6020808301919091528251808401909352600483526320ad2aa960e11b9083015290733cc6cdda760b79bafa08df41ecfa224f810dceb660016daaeb6d7670e522a718067333cd4e3b15620001c35780156200011657604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b5f604051808303815f87803b158015620000f9575f80fd5b505af11580156200010c573d5f803e3d5ffd5b50505050620001c3565b6001600160a01b03821615620001675760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000e1565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e486906024015f604051808303815f87803b158015620001ab575f80fd5b505af1158015620001be573d5f803e3d5ffd5b505050505b505f9050620001d38382620002f2565b506001620001e28282620002f2565b505060088054336001600160a01b0319918216811790925560098054821683179055600a80549091169091179055506001600160a01b0316608052620003ba565b5f6020828403121562000234575f80fd5b81516001600160a01b03811681146200024b575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200027b57607f821691505b6020821081036200029a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002ed575f81815260208120601f850160051c81016020861015620002c85750805b601f850160051c820191505b81811015620002e957828155600101620002d4565b5050505b505050565b81516001600160401b038111156200030e576200030e62000252565b62000326816200031f845462000266565b84620002a0565b602080601f8311600181146200035c575f8415620003445750858301515b5f19600386901b1c1916600185901b178555620002e9565b5f85815260208120601f198616915b828110156200038c578886015182559484019460019091019084016200036b565b5085821015620003aa57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b608051612293620003da5f395f81816103790152610a4d01526122935ff3fe608060405234801561000f575f80fd5b5060043610610201575f3560e01c80635c49d2cb11610123578063aa1b103f116100b8578063d547cfb711610088578063e985e9c51161006e578063e985e9c514610495578063ecde3c89146104c2578063f8004d31146104d5575f80fd5b8063d547cfb71461047a578063db5eb70214610482575f80fd5b8063aa1b103f14610439578063b113c60814610441578063b88d4fde14610454578063c87b56dd14610467575f80fd5b80638a616bc0116100f35780638a616bc0146103fa5780638da5cb5b1461040d57806395d89b411461041e578063a22cb46514610426575f80fd5b80635c49d2cb146103ae5780636352211e146103c157806367c24000146103d457806370a08231146103e7575f80fd5b80632525b3d71161019957806341f434341161016957806341f434341461034c57806342842e0e146103615780635909c12f146103745780635944c7531461039b575f80fd5b80632525b3d7146102e15780632a55205a146102f457806330176e131461032657806335137cd014610339575f80fd5b8063095ea7b3116101d4578063095ea7b31461029757806318160ddd146102aa57806323b872dd146102c157806324bbd049146102d4575f80fd5b806301ffc9a71461020557806304634d8d1461022d57806306fdde0314610242578063081812fc14610257575b5f80fd5b610218610213366004611a13565b6104e8565b60405190151581526020015b60405180910390f35b61024061023b366004611a66565b610618565b005b61024a61066a565b6040516102249190611ab9565b61027f610265366004611b09565b60046020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610224565b6102406102a5366004611b20565b6106f5565b6102b3600b5481565b604051908152602001610224565b6102406102cf366004611b48565b61070e565b600d546102189060ff1681565b6102406102ef366004611b81565b610739565b610307610302366004611b9a565b6107b7565b604080516001600160a01b039093168352602083019190915201610224565b610240610334366004611be7565b610892565b610240610347366004611b81565b6108e2565b61027f6daaeb6d7670e522a718067333cd4e81565b61024061036f366004611b48565b610960565b61027f7f000000000000000000000000000000000000000000000000000000000000000081565b6102406103a9366004611cb0565b610985565b60085461027f906001600160a01b031681565b61027f6103cf366004611b09565b6109d4565b6102406103e2366004611ce9565b610a42565b6102b36103f5366004611b81565b610b32565b610240610408366004611b09565b610ba4565b600a546001600160a01b031661027f565b61024a610bfb565b610240610434366004611d65565b610c08565b610240610c1c565b60095461027f906001600160a01b031681565b610240610462366004611d9a565b610c6b565b61024a610475366004611b09565b610c9a565b61024a610d1c565b600a5461027f906001600160a01b031681565b6102186104a3366004611e2d565b600560209081525f928352604080842090915290825290205460ff1681565b6102406104d0366004611b81565b610d29565b6102406104e3366004611e55565b610da7565b5f7f2a55205a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061057a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105c657507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061061257507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600a546001600160a01b0316331461065c576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106668282610e1c565b5050565b5f805461067690611e70565b80601f01602080910402602001604051908101604052809291908181526020018280546106a290611e70565b80156106ed5780601f106106c4576101008083540402835291602001916106ed565b820191905f5260205f20905b8154815290600101906020018083116106d057829003601f168201915b505050505081565b816106ff81610f47565b6107098383611030565b505050565b826001600160a01b03811633146107285761072833610f47565b610733848484611136565b50505050565b600a546001600160a01b0316331461077d576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b5f8281526007602090815260408083208151808301909252546001600160a01b038116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff169282019290925282916108575750604080518082019091526006546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b60208101515f906127109061087a906bffffffffffffffffffffffff1687611eee565b6108849190611f32565b915196919550909350505050565b6009546001600160a01b031633146108d6576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c6106668282611f8a565b6008546001600160a01b03163314610926576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b826001600160a01b038116331461097a5761097a33610f47565b61073384848461135d565b600a546001600160a01b031633146109c9576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070983838361148a565b5f818152600260205260409020546001600160a01b031680610a3d5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e5445440000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610aa4576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d5460ff16610ae0576040517f951b974f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610b1457610b0c32848484818110610b0057610b006120a2565b905060200201356115c5565b600101610ae2565b5081819050600b5f828254610b2991906120cf565b90915550505050565b5f6001600160a01b038216610b895760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610a34565b506001600160a01b03165f9081526003602052604090205490565b600a546001600160a01b03163314610be8576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f90815260076020526040812055565b50565b6001805461067690611e70565b81610c1281610f47565b6107098383611701565b600a546001600160a01b03163314610c60576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c695f600655565b565b846001600160a01b0381163314610c8557610c8533610f47565b610c92868686868661178a565b505050505050565b5f818152600260205260409020546060906001600160a01b0316610cea576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c610cf5836118ad565b604051602001610d069291906120e2565b6040516020818303038152906040529050919050565b600c805461067690611e70565b6009546001600160a01b03163314610d6d576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6008546001600160a01b03163314610deb576040517f1f7c4bf300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6127106bffffffffffffffffffffffff82161115610ea25760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b038216610ef85760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610a34565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600655565b6daaeb6d7670e522a718067333cd4e3b15610bf8576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610fcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fef9190612183565b610bf8576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a34565b5f818152600260205260409020546001600160a01b03163381148061107757506001600160a01b0381165f90815260056020908152604080832033845290915290205460ff165b6110c35760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610a34565b5f8281526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f818152600260205260409020546001600160a01b0384811691161461119e5760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610a34565b6001600160a01b0382166111f45760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610a34565b336001600160a01b038416148061122d57506001600160a01b0383165f90815260056020908152604080832033845290915290205460ff165b8061124d57505f818152600460205260409020546001600160a01b031633145b6112995760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610a34565b6001600160a01b038084165f81815260036020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526002825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61136883838361070e565b6001600160a01b0382163b158061143e57506040517f150b7a02000000000000000000000000000000000000000000000000000000008082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af11580156113f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061141a919061219e565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6107095760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610a34565b6127106bffffffffffffffffffffffff821611156115105760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b0382166115665760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610a34565b6040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182525f96875260079052919094209351905190911674010000000000000000000000000000000000000000029116179055565b6001600160a01b03821661161b5760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610a34565b5f818152600260205260409020546001600160a01b03161561167f5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610a34565b6001600160a01b0382165f81815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b335f8181526005602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61179585858561070e565b6001600160a01b0384163b158061185a57506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063150b7a02906117f69033908a908990899089906004016121b9565b6020604051808303815f875af1158015611812573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611836919061219e565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6118a65760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610a34565b5050505050565b6060815f036118ef57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b815f5b8115611918578061190281612229565b91506119119050600a83611f32565b91506118f2565b5f8167ffffffffffffffff81111561193257611932611bba565b6040519080825280601f01601f19166020018201604052801561195c576020820181803683370190505b5090505b84156119de57611971600183612260565b915061197e600a86612273565b6119899060306120cf565b60f81b81838151811061199e5761199e6120a2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506119d7600a86611f32565b9450611960565b949350505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610bf8575f80fd5b5f60208284031215611a23575f80fd5b8135611a2e816119e6565b9392505050565b80356001600160a01b0381168114610a3d575f80fd5b80356bffffffffffffffffffffffff81168114610a3d575f80fd5b5f8060408385031215611a77575f80fd5b611a8083611a35565b9150611a8e60208401611a4b565b90509250929050565b5f5b83811015611ab1578181015183820152602001611a99565b50505f910152565b602081525f8251806020840152611ad7816040850160208701611a97565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f60208284031215611b19575f80fd5b5035919050565b5f8060408385031215611b31575f80fd5b611b3a83611a35565b946020939093013593505050565b5f805f60608486031215611b5a575f80fd5b611b6384611a35565b9250611b7160208501611a35565b9150604084013590509250925092565b5f60208284031215611b91575f80fd5b611a2e82611a35565b5f8060408385031215611bab575f80fd5b50508035926020909101359150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215611bf7575f80fd5b813567ffffffffffffffff80821115611c0e575f80fd5b818401915084601f830112611c21575f80fd5b813581811115611c3357611c33611bba565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611c7957611c79611bba565b81604052828152876020848701011115611c91575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f805f60608486031215611cc2575f80fd5b83359250611cd260208501611a35565b9150611ce060408501611a4b565b90509250925092565b5f8060208385031215611cfa575f80fd5b823567ffffffffffffffff80821115611d11575f80fd5b818501915085601f830112611d24575f80fd5b813581811115611d32575f80fd5b8660208260051b8501011115611d46575f80fd5b60209290920196919550909350505050565b8015158114610bf8575f80fd5b5f8060408385031215611d76575f80fd5b611d7f83611a35565b91506020830135611d8f81611d58565b809150509250929050565b5f805f805f60808688031215611dae575f80fd5b611db786611a35565b9450611dc560208701611a35565b935060408601359250606086013567ffffffffffffffff80821115611de8575f80fd5b818801915088601f830112611dfb575f80fd5b813581811115611e09575f80fd5b896020828501011115611e1a575f80fd5b9699959850939650602001949392505050565b5f8060408385031215611e3e575f80fd5b611e4783611a35565b9150611a8e60208401611a35565b5f60208284031215611e65575f80fd5b8135611a2e81611d58565b600181811c90821680611e8457607f821691505b602082108103611ebb577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761061257610612611ec1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611f4057611f40611f05565b500490565b601f821115610709575f81815260208120601f850160051c81016020861015611f6b5750805b601f850160051c820191505b81811015610c9257828155600101611f77565b815167ffffffffffffffff811115611fa457611fa4611bba565b611fb881611fb28454611e70565b84611f45565b602080601f83116001811461200a575f8415611fd45750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610c92565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561205657888601518255948401946001909101908401612037565b508582101561209257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018082111561061257610612611ec1565b5f8084546120ef81611e70565b60018281168015612107576001811461213a57612166565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450612166565b885f526020805f205f5b8581101561215d5781548a820152908401908201612144565b50505082870194505b50505050835161217a818360208801611a97565b01949350505050565b5f60208284031215612193575f80fd5b8151611a2e81611d58565b5f602082840312156121ae575f80fd5b8151611a2e816119e6565b5f6001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a08401375f60a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361225957612259611ec1565b5060010190565b8181038181111561061257610612611ec1565b5f8261228157612281611f05565b50069056fea164736f6c6343000815000a0000000000000000000000000025c3abfa72e7c509ad458b50982835404a1d6c