0x60e06040523480156200001157600080fd5b5060405162002c1738038062002c178339810160408190526200003491620002ba565b816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000099919062000301565b826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fe919062000301565b8181856001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000165919062000301565b6001600160a01b0381166200019457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200019f8162000251565b506001600160a01b038083166080528116620001ce57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156200021657600080fd5b505af11580156200022b573d6000803e3d6000fd5b505050506001600160a01b039590951660a05250505063ffffffff1660c0525062000328565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620002b757600080fd5b50565b60008060408385031215620002ce57600080fd5b8251620002db81620002a1565b602084015190925063ffffffff81168114620002f657600080fd5b809150509250929050565b6000602082840312156200031457600080fd5b81516200032181620002a1565b9392505050565b60805160a05160c051612864620003b36000396000818161033b01528181610574015281816105c701528181610782015281816108170152610d130152600081816104da0152610d900152600081816102ac0152818161060501528181610bfd01528181610e1001528181610f9301528181610fb90152818161124001526112f901526128646000f3fe60806040526004361061016a5760003560e01c8063734ff5f3116100d1578063b98bd0701161008a578063ca5eb5e111610064578063ca5eb5e1146104a8578063e4f4fcee146104c8578063f2fde38b146104fc578063ff7bd03d1461051c57600080fd5b8063b98bd0701461043b578063bb0b6a531461045b578063bc70b3541461048857600080fd5b8063734ff5f3146103295780637d25a05e1461037257806382413eac146103aa5780638da5cb5b146103da578063989ac221146103f8578063a15a735f1461040d57600080fd5b80633400288b116101235780633400288b1461022d5780635535d4611461024d578063572526f71461027a5780635e280f111461029a578063634d45b2146102e6578063715018a61461031457600080fd5b8063066808fc1461017657806313137d651461018b57806317442b701461019e5780631d5766fa146101c55780631f5e1334146101f25780632ad7f28c1461021a57600080fd5b3661017157005b600080fd5b61018961018436600461179b565b61053c565b005b6101896101993660046118c5565b610603565b3480156101aa57600080fd5b50604080516001815260026020820152015b60405180910390f35b3480156101d157600080fd5b506101e56101e0366004611978565b6106c3565b6040516101bc9190611a13565b3480156101fe57600080fd5b50610207600181565b60405161ffff90911681526020016101bc565b610189610228366004611a2a565b61077d565b34801561023957600080fd5b50610189610248366004611aeb565b610854565b34801561025957600080fd5b5061026d610268366004611b27565b61086a565b6040516101bc9190611baa565b61028d610288366004611bc4565b61090f565b6040516101bc9190611cf6565b3480156102a657600080fd5b506102ce7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b3480156102f257600080fd5b50610306610301366004611d38565b610996565b6040516101bc929190611d79565b34801561032057600080fd5b506101896109b2565b34801561033557600080fd5b5061035d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101bc565b34801561037e57600080fd5b5061039261038d366004611aeb565b6109c6565b6040516001600160401b0390911681526020016101bc565b3480156103b657600080fd5b506103ca6103c5366004611da3565b6109cf565b60405190151581526020016101bc565b3480156103e657600080fd5b506000546001600160a01b03166102ce565b34801561040457600080fd5b50610207600281565b34801561041957600080fd5b5061042d610428366004611e09565b6109e4565b6040519081526020016101bc565b34801561044757600080fd5b50610189610456366004611e3d565b610a14565b34801561046757600080fd5b5061042d610476366004611eb1565b60016020526000908152604090205481565b34801561049457600080fd5b5061026d6104a3366004611ecc565b610a2e565b3480156104b457600080fd5b506101896104c3366004611f20565b610bd6565b3480156104d457600080fd5b506102ce7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050857600080fd5b50610189610517366004611f20565b610c5c565b34801561052857600080fd5b506103ca610537366004611f3d565b610c9a565b6040805160c08101825260018152602081018690526000918101829052606081018590526080810184905260a081018390526105a1917f0000000000000000000000000000000000000000000000000000000000000000919061028890803681611f59565b507ff9438e62a9376ceb8ba379e022ca3d3b12de834389abb5135d95b9b1e70e34fe84337f00000000000000000000000000000000000000000000000000000000000000006040516105f593929190611f83565b60405180910390a150505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610653576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b6020870180359061066d90610668908a611eb1565b610cd0565b146106ab5761067f6020880188611eb1565b60405163309afaf360e21b815263ffffffff90911660048201526020880135602482015260440161064a565b6106ba87878787878787610d0c565b50505050505050565b604080518082019091526000808252602082015260006106e66020870187611fbc565b6106f36020880188611fd7565b61070360608a0160408b01611f20565b61071060608b018b61201d565b61071d60808d018d61201d565b61072a60a08f018f611fd7565b6040516020016107439a9998979695949392919061216f565b604051602081830303815290604052905060006107638860028888610a2e565b905061077188838387610dfa565b98975050505050505050565b6107f17f00000000000000000000000000000000000000000000000000000000000000006040518060c00160405280600261ffff168152602001888152602001876001600160a01b031681526020018681526020018581526020018481525060003660009060009261028893929190611f59565b507f571eda013adac0d331e5b3a0a53fd6b49388353f6d72a3181310507a502e9fa985857f000000000000000000000000000000000000000000000000000000000000000060405161084593929190611f83565b60405180910390a15050505050565b61085c610edb565b6108668282610f08565b5050565b60026020908152600092835260408084209091529082529020805461088e90612265565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90612265565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b505050505081565b610917611461565b8351602080860151604080880151606089015160808a015160a08b015193516000976109479790969591016122f8565b604051602081830303815290604052905060006109678760028787610a2e565b905061098b8783836040518060400160405280348152602001600081525033610f5d565b979650505050505050565b606060006109a6838501856123d3565b915091505b9250929050565b6109ba610edb565b6109c46000611086565b565b60005b92915050565b6001600160a01b03811630145b949350505050565b6000816040516020016109f79190612424565b604051602081830303815290604052805190602001209050919050565b610a1c610edb565b610866610a298284612440565b6110d6565b63ffffffff8416600090815260026020908152604080832061ffff87168452909152812080546060929190610a6290612265565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8e90612265565b8015610adb5780601f10610ab057610100808354040283529160200191610adb565b820191906000526020600020905b815481529060010190602001808311610abe57829003601f168201915b505050505090508051600003610b2b5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509294506109dc9350505050565b6000839003610b3b5790506109dc565b60028310610bb957610b8284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e892505050565b80610b908460028188611f59565b604051602001610ba293929190612509565b6040516020818303038152906040529150506109dc565b8383604051639a6d49cd60e01b815260040161064a929190612531565b610bde610edb565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015610c4157600080fd5b505af1158015610c55573d6000803e3d6000fd5b5050505050565b610c64610edb565b6001600160a01b038116610c8e57604051631e4fbdf760e01b81526000600482015260240161064a565b610c9781611086565b50565b6000602082018035906001908390610cb29086611eb1565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806109c95760405163f6ff4fb760e01b815263ffffffff8416600482015260240161064a565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016610d406020890189611eb1565b63ffffffff16036106ba57600080610d588787610996565b915091506000610d67836109e4565b6040516340c10f1960e01b81526001600160a01b038481166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f1990604401600060405180830381600087803b158015610dd657600080fd5b505af1158015610dea573d6000803e3d6000fd5b5050505050505050505050505050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001610e5d89610cd0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401610e92929190612545565b6040805180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906125ee565b95945050505050565b6000546001600160a01b031633146109c45760405163118cdaa760e01b815233600482015260240161064a565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b610f65611461565b6000610f748460000151611214565b602085015190915015610f8e57610f8e846020015161123c565b610fb77f000000000000000000000000000000000000000000000000000000000000000061131e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016110078c610cd0565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611043929190612545565b60806040518083038185885af1158015611061573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061098b919061260a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156111ad576111088282815181106110f7576110f7612660565b6020026020010151604001516111e8565b81818151811061111a5761111a612660565b6020026020010151604001516002600084848151811061113c5761113c612660565b60200260200101516000015163ffffffff1663ffffffff168152602001908152602001600020600084848151811061117657611176612660565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816111a491906126c7565b506001016110d9565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b674816040516111dd9190612786565b60405180910390a150565b600281015161ffff81166003146108665781604051639a6d49cd60e01b815260040161064a9190611baa565b6000813414611238576040516304fb820960e51b815234600482015260240161064a565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561129c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190612811565b90506001600160a01b0381166112e9576040516329b99a9560e11b815260040160405180910390fd5b6108666001600160a01b038216337f000000000000000000000000000000000000000000000000000000000000000085611366565b6040516001600160a01b0382166024820152610c979060440160408051601f198184030181529190526020810180516001600160e01b031663161765e160e11b1790526113c6565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526113c09085906113cf565b50505050565b610c9781611440565b600080602060008451602086016000885af1806113f2576040513d6000823e3d81fd5b50506000513d9150811561140a578060011415611417565b6001600160a01b0384163b155b156113c057604051635274afe760e01b81526001600160a01b038516600482015260240161064a565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b60405180606001604052806000801916815260200160006001600160401b031681526020016114a3604051806040016040528060008152602001600081525090565b905290565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156114e0576114e06114a8565b60405290565b60405160c081016001600160401b03811182821017156114e0576114e06114a8565b604051606081016001600160401b03811182821017156114e0576114e06114a8565b604051601f8201601f191681016001600160401b0381118282101715611552576115526114a8565b604052919050565b600082601f83011261156b57600080fd5b81356001600160401b03811115611584576115846114a8565b611597601f8201601f191660200161152a565b8181528460208386010111156115ac57600080fd5b816020850160208301376000918101602001919091529392505050565b60006001600160401b038211156115e2576115e26114a8565b5060051b60200190565b600082601f8301126115fd57600080fd5b8135602061161261160d836115c9565b61152a565b82815260059290921b8401810191818101908684111561163157600080fd5b8286015b848110156116cf5780356001600160401b03808211156116555760008081fd5b908801906040828b03601f190181131561166f5760008081fd5b6116776114be565b87840135838111156116895760008081fd5b6116978d8a8388010161155a565b8252509083013590828211156116ad5760008081fd5b6116bb8c898487010161155a565b818901528652505050918301918301611635565b509695505050505050565b600082601f8301126116eb57600080fd5b813560206116fb61160d836115c9565b82815260059290921b8401810191818101908684111561171a57600080fd5b8286015b848110156116cf5780356001600160401b038082111561173e5760008081fd5b908801906040828b03601f19018113156117585760008081fd5b6117606114be565b8388013581529083013590828211156117795760008081fd5b6117878c898487010161155a565b81890152865250505091830191830161171e565b600080600080608085870312156117b157600080fd5b84356001600160401b03808211156117c857600080fd5b6117d48883890161155a565b955060208701359150808211156117ea57600080fd5b6117f6888389016115ec565b9450604087013591508082111561180c57600080fd5b611818888389016116da565b9350606087013591508082111561182e57600080fd5b5061183b8782880161155a565b91505092959194509250565b60006060828403121561185957600080fd5b50919050565b60008083601f84011261187157600080fd5b5081356001600160401b0381111561188857600080fd5b6020830191508360208285010111156109ab57600080fd5b6001600160a01b0381168114610c9757600080fd5b80356118c0816118a0565b919050565b600080600080600080600060e0888a0312156118e057600080fd5b6118ea8989611847565b96506060880135955060808801356001600160401b038082111561190d57600080fd5b6119198b838c0161185f565b909750955060a08a0135915061192e826118a0565b90935060c0890135908082111561194457600080fd5b506119518a828b0161185f565b989b979a50959850939692959293505050565b803563ffffffff811681146118c057600080fd5b60008060008060006080868803121561199057600080fd5b61199986611964565b945060208601356001600160401b03808211156119b557600080fd5b9087019060c0828a0312156119c957600080fd5b909450604087013590808211156119df57600080fd5b506119ec8882890161185f565b90945092505060608601358015158114611a0557600080fd5b809150509295509295909350565b8151815260208083015190820152604081016109c9565b600080600080600060a08688031215611a4257600080fd5b85356001600160401b0380821115611a5957600080fd5b611a6589838a0161155a565b965060208801359150611a77826118a0565b90945060408701359080821115611a8d57600080fd5b611a9989838a016115ec565b94506060880135915080821115611aaf57600080fd5b611abb89838a016116da565b93506080880135915080821115611ad157600080fd5b50611ade8882890161155a565b9150509295509295909350565b60008060408385031215611afe57600080fd5b611b0783611964565b946020939093013593505050565b803561ffff811681146118c057600080fd5b60008060408385031215611b3a57600080fd5b611b4383611964565b9150611b5160208401611b15565b90509250929050565b60005b83811015611b75578181015183820152602001611b5d565b50506000910152565b60008151808452611b96816020860160208601611b5a565b601f01601f19169290920160200192915050565b602081526000611bbd6020830184611b7e565b9392505050565b60008060008060608587031215611bda57600080fd5b611be385611964565b935060208501356001600160401b0380821115611bff57600080fd5b9086019060c08289031215611c1357600080fd5b611c1b6114e6565b611c2483611b15565b8152602083013582811115611c3857600080fd5b611c448a82860161155a565b602083015250611c56604084016118b5565b6040820152606083013582811115611c6d57600080fd5b611c798a8286016115ec565b606083015250608083013582811115611c9157600080fd5b611c9d8a8286016116da565b60808301525060a083013582811115611cb557600080fd5b611cc18a82860161155a565b60a08301525094506040870135915080821115611cdd57600080fd5b50611cea8782880161185f565b95989497509550505050565b6000608082019050825182526001600160401b0360208401511660208301526040830151611d31604084018280518252602090810151910152565b5092915050565b60008060208385031215611d4b57600080fd5b82356001600160401b03811115611d6157600080fd5b611d6d8582860161185f565b90969095509350505050565b604081526000611d8c6040830185611b7e565b905060018060a01b03831660208301529392505050565b60008060008060a08587031215611db957600080fd5b611dc38686611847565b935060608501356001600160401b03811115611dde57600080fd5b611dea8782880161185f565b9094509250506080850135611dfe816118a0565b939692955090935050565b600060208284031215611e1b57600080fd5b81356001600160401b03811115611e3157600080fd5b6109dc8482850161155a565b60008060208385031215611e5057600080fd5b82356001600160401b0380821115611e6757600080fd5b818501915085601f830112611e7b57600080fd5b813581811115611e8a57600080fd5b8660208260051b8501011115611e9f57600080fd5b60209290920196919550909350505050565b600060208284031215611ec357600080fd5b611bbd82611964565b60008060008060608587031215611ee257600080fd5b611eeb85611964565b9350611ef960208601611b15565b925060408501356001600160401b03811115611f1457600080fd5b611cea8782880161185f565b600060208284031215611f3257600080fd5b8135611bbd816118a0565b600060608284031215611f4f57600080fd5b611bbd8383611847565b60008085851115611f6957600080fd5b83861115611f7657600080fd5b5050820193919092039150565b606081526000611f966060830186611b7e565b6001600160a01b039490941660208301525063ffffffff91909116604090910152919050565b600060208284031215611fce57600080fd5b611bbd82611b15565b6000808335601e19843603018112611fee57600080fd5b8301803591506001600160401b0382111561200857600080fd5b6020019150368190038213156109ab57600080fd5b6000808335601e1984360301811261203457600080fd5b8301803591506001600160401b0382111561204e57600080fd5b6020019150600581901b36038213156109ab57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126120a657600080fd5b83016020810192503590506001600160401b038111156120c557600080fd5b8036038213156109ab57600080fd5b60008235603e198336030181126120ea57600080fd5b90910192915050565b60008383855260208086019550808560051b8301018460005b8781101561216257848303601f1901895261212782886120d4565b6040813585526121398683018361208f565b9250818787015261214d8287018483612066565b9b87019b95505050918401915060010161210c565b5090979650505050505050565b61ffff8b1681526000602060c08184015261218e60c084018c8e612066565b6001600160a01b038b166040850152838103606085015288815281810160058a901b820183018b60005b8c81101561222757848303601f190184526121d3828f6120d4565b6121dd818261208f565b604086526121ef604087018284612066565b9150506121fe8883018361208f565b925085820389870152612212828483612066565b968901969550505091860191506001016121b8565b5050858103608087015261223c818a8c6120f3565b935050505082810360a0840152612254818587612066565b9d9c50505050505050505050505050565b600181811c9082168061227957607f821691505b60208210810361185957634e487b7160e01b600052602260045260246000fd5b600082825180855260208086019550808260051b84010181860160005b8481101561216257858303601f1901895281518051845284015160408585018190526122e481860183611b7e565b9a86019a94505050908301906001016122b6565b61ffff871681526000602060c08184015261231660c0840189611b7e565b6001600160a01b0388166040858101919091528482036060860152875180835283830190600581901b84018501858b0160005b8381101561239957868303601f190185528151805187855261236d88860182611b7e565b918a0151858303868c01529190506123858183611b7e565b968a01969450505090870190600101612349565b505087810360808901526123ad818b612299565b9550505050505082810360a08401526123c68185611b7e565b9998505050505050505050565b600080604083850312156123e657600080fd5b82356001600160401b038111156123fc57600080fd5b6124088582860161155a565b9250506020830135612419816118a0565b809150509250929050565b60008251612436818460208701611b5a565b9190910192915050565b600061244e61160d846115c9565b80848252602080830192508560051b85013681111561246c57600080fd5b855b818110156124fd5780356001600160401b038082111561248e5760008081fd5b8189019150606082360312156124a45760008081fd5b6124ac611508565b6124b583611964565b81526124c2868401611b15565b86820152604080840135838111156124da5760008081fd5b6124e63682870161155a565b91830191909152508752505093820193820161246e565b50919695505050505050565b6000845161251b818460208901611b5a565b8201838582376000930192835250909392505050565b6020815260006109dc602083018486612066565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261257b60e0840182611b7e565b90506060850151603f198483030160a08501526125988282611b7e565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b6000604082840312156125d057600080fd5b6125d86114be565b9050815181526020820151602082015292915050565b60006040828403121561260057600080fd5b611bbd83836125be565b60006080828403121561261c57600080fd5b612624611508565b8251815260208301516001600160401b038116811461264257600080fd5b602082015261265484604085016125be565b60408201529392505050565b634e487b7160e01b600052603260045260246000fd5b601f8211156126c2576000816000526020600020601f850160051c8101602086101561269f5750805b601f850160051c820191505b818110156126be578281556001016126ab565b5050505b505050565b81516001600160401b038111156126e0576126e06114a8565b6126f4816126ee8454612265565b84612676565b602080601f83116001811461272957600084156127115750858301515b600019600386901b1c1916600185901b1785556126be565b600085815260208120601f198616915b8281101561275857888601518255948401946001909101908401612739565b50858210156127765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561280357888303603f190185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526127ef81860183611b7e565b9689019694505050908601906001016127af565b509098975050505050505050565b60006020828403121561282357600080fd5b8151611bbd816118a056fea2646970667358221220249c7b566b72557d5607d2d61903fa881e345220f8da480596025fabcc9acca564736f6c634300081600330000000000000000000000003d8ec641793c3f5bde837bda7772ec6a77d1da320000000000000000000000000000000000000000000000000000000000007606